#ifndef DSET_H_
#define DSET_H_
#include "../../SAMA_Function.h"

#define DSET_PULSE_PERIOD 50						//< yuanlai shi 4

typedef enum {
	DSET_PULSE = 0,		//< 脉冲
	DSET_TURN,			//< 翻转
	DSET_LONGSIG		//< 长信号
}DSET_Mode_e;

/*模块可调参数结构体*/
typedef struct {
	DSET_Mode_e Work_Mode;		//< 工作模式：0-脉冲；1-翻转；2-长信号
	float Pulse_time;          //< 脉冲时间
}DSET_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	bool Button_Pressed;		//< 按钮是否被按下，按下为true，未按下为false
	float Count;					//< 计数变量，相关命令字下给该变量赋值，然后在函数运行程序中逐渐递减为0
	bool Out_Value;				//< 模块输出值
}DSET_Sta_t;


/*模块参数结构体定义*/
struct DSET_T
{
	Model_Base_t Base;		//< 模块基本参数结构体
	DSET_Par_t Par;		//< 模块可调参数结构体
	DSET_Sta_t Sta;		//< 模块运算中间参数结构体
};


extern DSET_T* DSET_t;

/*函数*/
bool CALCU_SAMA(DSET)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);	//< SAMA运算函数
int BC_PARA(DSET)(Model_Base_t* arg, void** Data);												//< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(DSET)(Model_Base_t* arg, void** Data);												//< 备份SAMA运算中间参数
int ANA_STA(DSET)(Model_Base_t* arg, void** Data);												//< 解析备份的SAMA运算中间参数
int CHANGE_PAR(DSET)(Model_Base_t* arg, void** Data);											//< 在线修改模块参数函数
void INIT_STAPAR(DSET)(Model_Base_t* arg);														//< 初始化模块运算中间参数
void CMD_DEAL(DSET)(Model_Base_t* arg, void* Data, const char* CMD);							//< 与模块相关的命令字处理函数


#endif
